home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Express Pd: GALORE
/
Express Pd Galore - The Amiga PD & Shareware CD (1994)(Express Pd)[!][Amiga-CD32-CDTV].iso
/
productivity
/
term
/
phonepanel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-16
|
53KB
|
2,060 lines
/*
** PhonePanel.c
**
** The phonebook and support routines
**
** Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
** All Rights Reserved
*/
#include "termGlobal.h"
/* Gadget IDs. */
enum { GAD_NAMELIST, GAD_EDIT,
GAD_NAME, GAD_COMMENT, GAD_PHONENUMBER, GAD_QUICKMENU,
GAD_NEWENTRY, GAD_DIALLIST, GAD_LOADLIST, GAD_COPYCONFIG,
GAD_CLONEENTRY, GAD_CLEARLIST, GAD_SORTLIST, GAD_PASSWORD,
GAD_REMOVEENTRY, GAD_USEIT, GAD_SAVELIST, GAD_PRINT };
/* Editing IDs. */
enum { EDIT_SERIAL, EDIT_MODEM, EDIT_SCREEN, EDIT_TERMINAL,
EDIT_EMULATION, EDIT_CLIPBOARD, EDIT_CAPTURE, EDIT_COMMANDS,
EDIT_MISC, EDIT_PATHS, EDIT_TRANSFER, EDIT_TRANSLATION,
EDIT_KEYMACROS, EDIT_CURSORKEYS,
EDIT_FASTMACROS, EDIT_PASSWORD, EDIT_RATES };
/* What action is to follow clicking into the listview. */
enum { CLICK_NONE,CLICK_SELECT,CLICK_TOGGLE,CLICK_DIAL };
STATIC struct List EditList;
STATIC struct Node EditNode[17];
STATIC STRPTR EditName[18];
STATIC struct Hook ListViewHook;
/* ListViewRender():
*
* This callback routine is responsible for rendering
* the single listview entries.
*/
STATIC ULONG __saveds __asm
ListViewRender(register __a0 struct Hook *Hook,register __a1 struct LVDrawMsg *Msg,register __a2 struct PhoneNode *Node)
{
/* We only know how to redraw lines. */
if(Msg -> lvdm_MethodID == LV_DRAW)
{
struct RastPort *RPort = Msg -> lvdm_RastPort;
LONG Count = Node -> Entry -> Count + 1,
Left = Msg -> lvdm_Bounds . MinX,
Top = Msg -> lvdm_Bounds . MinY,
Width = Msg -> lvdm_Bounds . MaxX - Msg -> lvdm_Bounds . MinX + 1,
Height = Msg -> lvdm_Bounds . MaxY - Msg -> lvdm_Bounds . MinY + 1,
FgPen,BgPen,
Template,
Len,LabelLen;
UBYTE String[80],Num[8];
/* Determine the rendering pens. */
switch(Msg -> lvdm_State)
{
case LVR_SELECTEDDISABLED:
case LVR_NORMALDISABLED:
case LVR_NORMAL:
FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[TEXTPEN];
BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[BACKGROUNDPEN];
break;
case LVR_SELECTED:
FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLTEXTPEN];
BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLPEN];
break;
}
SetAPen(RPort,BgPen);
RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
Left += 2;
Width -= 2;
/* Determine maximum index text length. */
Template = 3 * ((ULONG)Hook -> h_Data) + TextLength(RPort," - ",3);
/* Get the vanilla name. */
strcpy(String,&Node -> VanillaNode . ln_Name[6]);
/* Set the rendering pens. */
SetDrMd(RPort,JAM2);
SetBPen(RPort,BgPen);
/* Has this entry been selected? */
if(Count > 0)
{
LONG Delta;
/* Set up the header. */
SPrintf(Num,"%3ld - ",Count);
/* Determine header length. */
Len = TextLength(RPort,Num,6);
/* Fill the space to precede the header. */
if((Delta = Template - Len) > 0)
{
SetAPen(RPort,BgPen);
RectFill(RPort,Left,Top,Left + Delta - 1,Top + Height - 1);
}
/* Render the header, right-justified. */
SetAPen(RPort,FgPen);
Move(RPort,Left + Delta,Top + RPort -> Font -> tf_Baseline);
Text(RPort,Num,6);
}
else
{
/* Fill the blank space to precede the vanilla name. */
SetAPen(RPort,BgPen);
RectFill(RPort,Left,Top,Left + Template - 1,Top + Height - 1);
SetAPen(RPort,FgPen);
}
/* Adjust width and area left edge. */
Left += Template;
Width -= Template;
/* Determine length of vanilla name. */
LabelLen = strlen(String);
/* Try to make it fit. */
while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
LabelLen--;
/* Print the vanilla name if possible. */
if(LabelLen)
{
Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
Text(RPort,String,LabelLen);
Left += Len;
Width -= Len;
}
/* Fill the area to follow the vanilla name. */
if(Width > 0)
{
SetAPen(RPort,BgPen);
RectFill(RPort,Left,Top,Left + Width - 1,Top + Height - 1);
}
/* If the item happens to be disabled, draw the cross-hatch
* pattern across it.
*/
if(Msg -> lvdm_State == LVR_SELECTEDDISABLED || Msg -> lvdm_State == LVR_NORMALDISABLED)
{
SetDrMd(RPort,JAM1);
SetAPen(RPort,Msg -> lvdm_DrawInfo -> dri_Pens[BLOCKPEN]);
SetAfPt(RPort,(UWORD *)&Ghosting,1);
RectFill(RPort,Msg -> lvdm_Bounds . MinX,Msg -> lvdm_Bounds . MinY,Msg -> lvdm_Bounds . MaxX,Msg -> lvdm_Bounds . MaxY);
SetAfPt(RPort,NULL,0);
}
return(LVCB_OK);
}
else
return(LVCB_UNKNOWN);
}
STATIC struct Gadget *
CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList)
{
struct Gadget *Gadget;
struct NewGadget NewGadget;
UWORD Counter = 0;
WORD Lines = EDIT_RATES + 1;
LocalizeString(EditName,MSG_PHONEPANEL_SERIAL_TXT,MSG_PHONEPANEL_RATES_TXT);
memset(&NewGadget,0,sizeof(struct NewGadget));
SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
if(Gadget = CreateContext(GadgetList))
{
WORD i,Max,Len,Width,ButtonWidth,MaxWidth,LeftEdge,EditWidth,ListWidth;
NewList(&EditList);
for(i = 0 ; i < 17 ; i++)
{
EditNode[i] . ln_Name = EditName[i];
AddTail(&EditList,&EditNode[i]);
}
SZ_ResetMaxWidth();
for(i = MSG_PHONEPANEL_PRINT_GAD ; i <= MSG_PHONEPANEL_SET_PASSWORT_GAD ; i++)
SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(i),0,NULL);
ButtonWidth = SZ_ResetMaxWidth();
MaxWidth = 4 * ButtonWidth + 3 * INTERWIDTH;
Max = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_PHONE_NUMBER_GAD));
if((Len = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_BBS_NAME_GAD))) > Max)
Max = Len;
if((Len = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_COMMENT_GAD))) > Max)
Max = Len;
if((Len = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_QUICK_MENU_GAD))) > Max)
Max = Len;
SZ_AddLeftOffset(Max + INTERWIDTH);
LeftEdge = SZ_GetLeftEdge();
ListWidth = SZ_Width(LISTVIEW_KIND,NULL,35,NULL);
Width = 0;
for(i = 0 ; i < 17 ; i++)
{
if((Len = strlen(EditName[i])) > Width)
Width = Len;
}
EditWidth = SZ_Width(LISTVIEW_KIND,NULL,Width,NULL);
if(MaxWidth > ListWidth + InterWidth + EditWidth)
{
LONG Remainder = ListWidth + InterWidth + EditWidth;
Width = (MaxWidth - Remainder) / 2;
ListWidth += Width;
EditWidth += MaxWidth - (Remainder + Width);
}
FOREVER
{
NewGadget . ng_Flags = PLACETEXT_ABOVE|NG_HIGHLABEL;
NewGadget . ng_GadgetText = LocaleString(MSG_GLOBAL_NAME_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
ListViewHook . h_Entry = (LONG (*)())ListViewRender;
ListViewHook . h_Data = (APTR)SZ_GetNumericLen("1");
GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_UseWidth, ListWidth,
SZ_Lines, Lines,
SZ_InterHeight, 1,
GTLV_CallBack, &ListViewHook,
TAG_DONE);
if(SZ_GetWindowHeight() + 6 * InterHeight + 3 * (SZ_Height(BUTTON_KIND,0,0) + SZ_Height(STRING_KIND,0,0)) + SZ_Height(CHECKBOX_KIND,0,0) > Window -> Height - (Window -> BorderTop + Window -> BorderBottom) && Lines >= 2)
{
if(*GadgetList)
{
FreeGadgets(*GadgetList);
*GadgetList = NULL;
}
SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
Counter = 0;
Lines--;
if(!(Gadget = CreateContext(GadgetList)))
return(NULL);
SZ_AddLeftOffset(Max + INTERWIDTH);
}
else
break;
}
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_SETTINGS_TXT);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_NewColumn, TRUE,
SZ_UseWidth, EditWidth,
SZ_Lines, Lines,
!Kick30 ? TAG_IGNORE : GA_Disabled, TRUE,
GTLV_Labels, &EditList,
SZ_InterHeight, 1,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_BBS_NAME_GAD);
NewGadget . ng_GadgetID = Counter;
NewGadget . ng_Flags = PLACETEXT_LEFT;
GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_FullWidth, TRUE,
SZ_UseLeft, LeftEdge,
SZ_AlignBottom, TRUE,
GTST_MaxChars, 39,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_COMMENT_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
GTST_MaxChars, 99,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_PHONE_NUMBER_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
GTST_MaxChars, 99,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_QUICK_MENU_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
GA_Disabled, TRUE,
TAG_DONE);
SZ_SetWidth(ButtonWidth);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_NEW_ENTRY_GAD);
NewGadget . ng_GadgetID = Counter;
NewGadget . ng_Flags = PLACETEXT_IN;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_AlignBottom, TRUE,
SZ_GroupCount, 4,
SZ_UseLeft, LeftEdge,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_DIAL_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_LOAD_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GA_Disabled, (Online && ChosenEntry),
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_COPY_CONFIG_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_CLONE_ENTRY_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_AlignBottom, TRUE,
SZ_GroupCount, 4,
SZ_UseLeft, LeftEdge,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_CLEAR_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_SORT_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_SET_PASSWORT_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_REMOVE_ENTRY_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_AlignBottom, TRUE,
SZ_GroupCount, 4,
SZ_UseLeft, LeftEdge,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_USE_ENTRY_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_SAVE_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_PRINT_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GA_Disabled, TRUE,
TAG_DONE);
}
return(Gadget);
}
STATIC BYTE
EditConfig(struct Configuration *Config,UWORD Type,struct Window *PanelWindow)
{
STATIC LONG TypeMappings[15][2] =
{
EDIT_SERIAL, PREF_SERIAL,
EDIT_MODEM, PREF_MODEM,
EDIT_SCREEN, PREF_SCREEN,
EDIT_TERMINAL, PREF_TERMINAL,
EDIT_EMULATION, PREF_EMULATION,
EDIT_CLIPBOARD, PREF_CLIP,
EDIT_CAPTURE, PREF_CAPTURE,
EDIT_COMMANDS, PREF_COMMAND,
EDIT_MISC, PREF_MISC,
EDIT_PATHS, PREF_PATH,
EDIT_TRANSFER, PREF_TRANSFER,
EDIT_TRANSLATION, PREF_FILE,
EDIT_KEYMACROS, PREF_FILE,
EDIT_CURSORKEYS, PREF_FILE,
EDIT_FASTMACROS, PREF_FILE
};
struct FileRequester *FileRequest;
UBYTE DummyBuffer[MAX_FILENAME_LENGTH],
*DummyChar;
BYTE Changed = FALSE,
Default = FALSE;
LONG PrefType;
WORD i;
APTR Data;
for(i = 0 ; i < 15 ; i++)
{
if(TypeMappings[i][0] == Type)
{
PrefType = TypeMappings[i][1];
break;
}
}
Data = GetConfigEntry(Config,PrefType);
if(CreateConfigEntry(Config,PrefType))
{
if(!Data)
ResetConfigEntry(Config,PrefType,FALSE);
switch(Type)
{
case EDIT_SERIAL:
Changed = SerialPanel(Config,&Default);
break;
case EDIT_MODEM:
Changed = ModemPanel(Config,&Default);
break;
case EDIT_SCREEN:
Changed = ScreenPanel(Config,&Default);
break;
case EDIT_TERMINAL:
Changed = TerminalPanel(Config,&Default);
break;
case EDIT_EMULATION:
Changed = EmulationPanel(Config,&Default);
break;
case EDIT_CLIPBOARD:
Changed = ClipPanel(Config,&Default);
break;
case EDIT_CAPTURE:
Changed = CapturePanel(Config,&Default);
break;
case EDIT_COMMANDS:
Changed = CommandPanel(Config,&Default);
break;
case EDIT_MISC:
Changed = MiscPanel(Config,&Default);
break;
case EDIT_PATHS:
Changed = PathPanel(Config,&Default);
break;
case EDIT_TRANSFER:
Changed = LibPanel(Config,&Default);
break;
case EDIT_TRANSLATION:
strcpy(DummyBuffer,Config -> FileConfig -> TranslationFileName);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_TRANSLATION_TXT),DummyBuffer,FilePart(Config -> FileConfig -> TranslationFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
{
strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
FreeAslRequest(FileRequest);
Changed = TRUE;
}
break;
case EDIT_KEYMACROS:
strcpy(DummyBuffer,Config -> FileConfig -> MacroFileName);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_KEYBOARD_MACROS_TXT),DummyBuffer,FilePart(Config -> FileConfig -> MacroFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
{
strcpy(Config -> FileConfig -> MacroFileName,DummyBuffer);
FreeAslRequest(FileRequest);
Changed = TRUE;
}
break;
case EDIT_CURSORKEYS:
strcpy(DummyBuffer,Config -> FileConfig -> CursorFileName);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_CURSOR_KEYS_TXT),DummyBuffer,FilePart(Config -> FileConfig -> CursorFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
{
strcpy(Config -> FileConfig -> CursorFileName,DummyBuffer);
FreeAslRequest(FileRequest);
Changed = TRUE;
}
break;
case EDIT_FASTMACROS:
strcpy(DummyBuffer,Config -> FileConfig -> FastMacroFileName);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_FAST_MACROS_TXT),DummyBuffer,FilePart(Config -> FileConfig -> FastMacroFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
{
strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
FreeAslRequest(FileRequest);
Changed = TRUE;
}
break;
}
if((!Changed && !Data) || Default)
{
DeleteConfigEntry(Config,PrefType);
if(Default)
Changed = TRUE;
}
}
else
DisplayBeep(Window -> WScreen);
return(Changed);
}
BYTE
PhonePanel()
{
STATIC WORD OffsetX = -1,OffsetY = -1;
struct Window *PanelWindow;
struct Gadget *GadgetList = NULL;
struct Gadget *GadgetArray[GAD_PRINT + 1];
ULONG Sec1,Mic1,Sec2,Mic2;
LONG HitItem = -1,Count = -1;
BYTE DialTheList = FALSE;
struct PhoneNode *TempNode;
struct List *PhoneList = NULL;
if(CreateAllGadgets(GadgetArray,&GadgetList))
{
if(PanelWindow = OpenWindowTags(NULL,
WA_Left, GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
WA_Top, GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight()) / 2,
WA_Width, SZ_GetWindowWidth(),
WA_Height, SZ_GetWindowHeight(),
WA_Activate, TRUE,
WA_DragBar, TRUE,
WA_DepthGadget, TRUE,
WA_RMBTrap, TRUE,
WA_DepthGadget, TRUE,
WA_CloseGadget, TRUE,
WA_CustomScreen,Window -> WScreen,
WA_IDCMP, IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_RAWKEY | STRINGIDCMP | BUTTONIDCMP | LISTVIEWIDCMP,
WA_Title, LocaleString(MSG_PHONEPANEL_PHONEBOOK_TXT),
TAG_DONE))
{
struct IntuiMessage *Massage;
ULONG IClass,Code,Qualifier;
struct Gadget *Gadget;
BYTE Terminated = FALSE,
ClickAction;
UBYTE DummyBuffer[MAX_FILENAME_LENGTH],
*DummyChar;
LONG Selected = ~0,i;
struct FileRequester *FileRequest;
GuideContext(CONTEXT_PHONEBOOK);
PushWindow(PanelWindow);
AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
GT_RefreshWindow(PanelWindow,NULL);
if(Phonebook && NumPhoneEntries)
{
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels,PhoneList,
TAG_DONE);
if(PhoneList -> lh_Head -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
}
}
}
ActiveGadget = NULL;
FreeDialList(TRUE);
for(i = 0 ; i < NumPhoneEntries ; i++)
{
if(Phonebook[i] -> Count > Count)
Count = Phonebook[i] -> Count;
}
Count++;
if(Count)
{
if(!Online)
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
ClrSignal(SIG_BREAK);
while(!Terminated)
{
if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
{
FreeDialList(TRUE);
break;
}
while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
{
IClass = Massage -> Class;
Code = Massage -> Code;
Qualifier = Massage -> Qualifier;
Gadget = (struct Gadget *)Massage -> IAddress;
GT_ReplyIMsg(Massage);
if(IClass == IDCMP_VANILLAKEY)
{
if(Code == ' ')
{
if(Selected != -1)
{
HitItem = -1;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(Phonebook[Selected] -> Count == -1)
{
if(!Count)
{
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
if(!Online && Phonebook[Selected] -> Header -> Number[0] && Phonebook[Selected] -> Header -> Name[0])
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
Phonebook[Selected] -> Count = Count++;
SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
}
else
{
RemoveDialEntry(Selected);
if(!(--Count))
{
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
}
}
else
{
KeySelect(GadgetArray,GAD_PRINT,Code,PanelWindow,&Gadget,&IClass,&Code);
if(IClass == IDCMP_GADGETUP)
Qualifier = NULL;
}
}
if(IClass == IDCMP_RAWKEY)
{
KeySelect(GadgetArray,GAD_PRINT,Code,PanelWindow,&Gadget,&IClass,&Code);
if(IClass == IDCMP_GADGETUP)
Qualifier = NULL;
}
if(IClass == IDCMP_GADGETDOWN)
{
if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
ActiveGadget = Gadget;
}
if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
ActivateGadget(ActiveGadget,PanelWindow,NULL);
if(IClass == IDCMP_CLOSEWINDOW)
{
FreeDialList(TRUE);
Terminated = TRUE;
}
if(IClass == IDCMP_GADGETUP)
{
switch(Gadget -> GadgetID)
{
case GAD_NAMELIST:
if(HitItem != Code)
{
HitItem = Code;
CurrentTime(&Sec1,&Mic1);
if(Phonebook[Code] -> Header -> Number[0] && Phonebook[Code] -> Header -> Name[0])
{
if(Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT))
ClickAction = CLICK_TOGGLE;
else
ClickAction = CLICK_SELECT;
}
else
ClickAction = CLICK_SELECT;
}
else
{
if(Phonebook[Code] -> Header -> Number[0] && Phonebook[Code] -> Header -> Name[0])
{
if(Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT))
{
CurrentTime(&Sec1,&Mic1);
ClickAction = CLICK_TOGGLE;
}
else
{
CurrentTime(&Sec2,&Mic2);
if(DoubleClick(Sec1,Mic1,Sec2,Mic2))
ClickAction = CLICK_DIAL;
else
ClickAction = CLICK_NONE;
Sec1 = Sec2;
Mic1 = Mic2;
}
}
else
{
CurrentTime(&Sec1,&Mic1);
ClickAction = CLICK_NONE;
}
}
if(ClickAction == CLICK_SELECT || ClickAction == CLICK_TOGGLE)
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Code] -> Header -> Name,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
GTST_String, Phonebook[Code] -> Header -> Comment,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Code] -> Header -> Number,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
GTCB_Checked, Phonebook[Code] -> Header -> QuickMenu,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, (Phonebook[Code] == ChosenEntry && Online),
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, Online || !(Count || Phonebook[Code] -> Header -> Number[0] && Phonebook[Code] -> Header -> Name[0]),
TAG_DONE);
if(Kick30)
{
GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
Selected = Code;
}
if(ClickAction == CLICK_DIAL)
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
Count = 0;
for(i = 0 ; i < NumPhoneEntries ; i++)
{
SPrintf(Phonebook[i] -> Node -> LocalName," %s",Phonebook[i] -> Header -> Name);
Phonebook[i] -> Count = -1;
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
DialTheList = TRUE;
Terminated = TRUE;
}
if(ClickAction == CLICK_TOGGLE || ClickAction == CLICK_DIAL)
{
HitItem = -1;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(Phonebook[Selected] -> Count == -1)
{
if(!Count)
{
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
Phonebook[Selected] -> Count = Count++;
SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
}
else
{
RemoveDialEntry(Selected);
if(!(--Count))
{
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
}
break;
case GAD_CLEARLIST:
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
Count = 0;
for(i = 0 ; i < NumPhoneEntries ; i++)
{
SPrintf(Phonebook[i] -> Node -> LocalName," %s",Phonebook[i] -> Header -> Name);
Phonebook[i] -> Count = -1;
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
if(Selected == ~0)
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
break;
case GAD_PRINT:
BlockWindow(PanelWindow);
PrintPanel(PanelWindow,PhoneList,Count);
ReleaseWindow(PanelWindow);
break;
case GAD_USEIT:
if(Selected != ~0)
{
SaveConfig(Config,PrivateConfig);
SaveConfig(Phonebook[Selected] -> Config,Config);
strcpy(Password,Phonebook[Selected] -> Header -> Password);
strcpy(UserName,Phonebook[Selected] -> Header -> UserName);
ConfigSetup();
Terminated = TRUE;
ConfigChanged = FALSE;
}
break;
case GAD_NEWENTRY:
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(PhoneList)
{
DeletePhoneList(PhoneList);
PhoneList = NULL;
}
if(NewPhoneEntry())
{
if(PhoneList = CreatePhoneList())
{
Selected = NumPhoneEntries - 1;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
GTLV_Top, Selected,
GTLV_MakeVisible, Selected,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Header -> Name,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Header -> Comment,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Header -> Number,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
GTCB_Checked, Phonebook[Selected] -> Header -> QuickMenu,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
if(Kick30)
{
GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
if(NumPhoneEntries == 1)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
if(NumPhoneEntries > 1)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
ActivateGadget(GadgetArray[GAD_NAME],PanelWindow,NULL);
ActiveGadget = GadgetArray[GAD_NAME];
RebuildMenu = PhonebookChanged = TRUE;
}
else
goto ClearList;
}
else
goto ClearList;
break;
case GAD_CLONEENTRY:
if(Selected != ~0)
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(PhoneList)
{
DeletePhoneList(PhoneList);
PhoneList = NULL;
}
if(NewPhoneEntry())
{
if(PhoneList = CreatePhoneList())
{
LONG Tmp = Selected,i;
Selected = NumPhoneEntries - 1;
CopyMem(Phonebook[Tmp] -> Header,Phonebook[Selected] -> Header,sizeof(struct PhoneHeader));
Phonebook[Selected] -> Header -> QuickMenu = FALSE;
SPrintf(Phonebook[Selected] -> Node -> LocalName," %s",Phonebook[Selected] -> Header -> Name);
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
GTLV_Top, Selected,
GTLV_MakeVisible, Selected,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Header -> Name,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Header -> Comment,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Header -> Number,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
GTCB_Checked, Phonebook[Selected] -> Header -> QuickMenu,
TAG_DONE);
if(NumPhoneEntries > 1)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
/* Allocate space for the config data. */
for(i = PREF_SERIAL ; i <= PREF_EMULATION ; i++)
{
if(GetConfigEntry(Phonebook[Tmp] -> Config,i))
CreateConfigEntry(Phonebook[Selected] -> Config,i);
}
/* Copy the data. */
SaveConfig(Phonebook[Tmp] -> Config,Phonebook[Selected] -> Config);
RebuildMenu = PhonebookChanged = TRUE;
}
else
goto ClearList;
}
else
goto ClearList;
}
break;
case GAD_REMOVEENTRY:
if(Selected != ~0)
{
if(Phonebook[Selected] == ChosenEntry)
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
else
{
RebuildMenu = PhonebookChanged = TRUE;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels,~0,
TAG_DONE);
if(PhoneList)
{
DeletePhoneList(PhoneList);
PhoneList = NULL;
}
if(Phonebook[Selected] -> Count != -1)
{
RemoveDialEntry(Selected);
if(!(--Count))
{
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
RemPhoneEntry(Selected);
if(NumPhoneEntries > 0)
{
if(PhoneList = CreatePhoneList())
{
if(Selected == NumPhoneEntries)
Selected--;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Header -> Name,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Header -> Comment,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Header -> Number,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
GTCB_Checked, Phonebook[Selected] -> Header -> QuickMenu,
TAG_DONE);
}
else
goto ClearList;
if(NumPhoneEntries == 1)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
else
{
ClearList: GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, &EmptyList,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
if(Kick30)
{
GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
ActiveGadget = NULL;
Selected = ~0;
HitItem = -1;
}
}
}
break;
case GAD_NAME:
if(Selected != ~0)
{
strcpy(Phonebook[Selected] -> Header -> Name,SZ_GetString(GadgetArray[GAD_NAME]));
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels,~0,
TAG_DONE);
if(PhoneList)
DeletePhoneList(PhoneList);
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
GTLV_Top, Selected,
GTLV_MakeVisible, Selected,
TAG_DONE);
}
if(!Phonebook[Selected] -> Header -> Name[0])
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(Phonebook[Selected] -> Count != -1)
{
RemoveDialEntry(Selected);
if(!(--Count))
{
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
GTLV_Top, Selected,
GTLV_MakeVisible, Selected,
TAG_DONE);
}
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, Online || !Phonebook[Selected] -> Header -> Number[0] || !Phonebook[Selected] -> Header -> Name[0],
TAG_DONE);
}
RebuildMenu = PhonebookChanged = TRUE;
}
break;
case GAD_COMMENT:
if(Selected != ~0)
{
strcpy(Phonebook[Selected] -> Header -> Comment,SZ_GetString(GadgetArray[GAD_COMMENT]));
PhonebookChanged = TRUE;
}
break;
case GAD_QUICKMENU:
if(Selected != ~0)
{
if(Phonebook[Selected] -> Header -> QuickMenu != SZ_GetChecked(Gadget))
{
Phonebook[Selected] -> Header -> QuickMenu = SZ_GetChecked(Gadget);
RebuildMenu = PhonebookChanged = TRUE;
}
}
break;
case GAD_PHONENUMBER:
if(Selected != ~0)
{
strcpy(Phonebook[Selected] -> Header -> Number,SZ_GetString(GadgetArray[GAD_PHONENUMBER]));
PhonebookChanged = TRUE;
if(!Phonebook[Selected] -> Header -> Number[0])
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(Phonebook[Selected] -> Count != -1)
{
RemoveDialEntry(Selected);
if(!(--Count))
{
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
GTLV_Top, Selected,
GTLV_MakeVisible, Selected,
TAG_DONE);
}
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, Online || !Phonebook[Selected] -> Header -> Number[0] || !Phonebook[Selected] -> Header -> Name[0],
TAG_DONE);
}
}
break;
case GAD_LOADLIST:
BlockWindow(PanelWindow);
if(ChosenEntry)
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_LOAD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
else
{
strcpy(DummyBuffer,LastPhone);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_LOAD_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
{
if(PhoneList)
DeletePhoneList(PhoneList);
if(!LoadPhonebook(DummyBuffer))
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_LOAD_PHONEBOOK_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
else
{
strcpy(LastPhone,DummyBuffer);
PhonebookChanged = FALSE;
RebuildMenu = TRUE;
}
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
FreeDialList(TRUE);
}
Count = 0;
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
if(Kick30)
{
GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
ActiveGadget = NULL;
if(PhoneList)
{
if(!PhoneList -> lh_Head -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
}
Selected = ~0;
HitItem = -1;
FreeAslRequest(FileRequest);
}
}
ReleaseWindow(PanelWindow);
break;
case GAD_SORTLIST:
if(NumPhoneEntries > 1)
{
RebuildMenu = PhonebookChanged = TRUE;
BlockWindow(PanelWindow);
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
if(Kick30)
{
GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
ActiveGadget = NULL;
if(PhoneList)
DeletePhoneList(PhoneList);
SortPhoneEntries();
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, ~0,
TAG_DONE);
}
Selected = ~0;
HitItem = -1;
ReleaseWindow(PanelWindow);
}
break;
case GAD_SAVELIST:
if(NumPhoneEntries)
{
strcpy(DummyBuffer,LastPhone);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
BlockWindow(PanelWindow);
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SAVE_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
{
if(!SavePhonebook(DummyBuffer))
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_CREATE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
else
{
strcpy(LastPhone,DummyBuffer);
PhonebookChanged = FALSE;
}
FreeAslRequest(FileRequest);
}
ReleaseWindow(PanelWindow);
}
break;
case GAD_COPYCONFIG:
BlockWindow(PanelWindow);
if(Selected == ~0)
PhonebookChanged |= CopyPanel(NULL,Count > 0);
else
PhonebookChanged |= CopyPanel(Phonebook[Selected] -> Config,Count > 0);
ReleaseWindow(PanelWindow);
break;
case GAD_PASSWORD:
BlockWindow(PanelWindow);
{
struct Gadget *OldActiveGadget = ActiveGadget;
UBYTE SomeBuffer[30];
memset(SomeBuffer,0,21);
PhonePasswordUsed = FALSE;
if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_ENTER_PASSWORD_TXT),SomeBuffer))
{
SomeBuffer[20] = 0;
PhonebookChanged = TRUE;
if(SomeBuffer[0])
{
UBYTE OtherBuffer[30];
memset(OtherBuffer,0,21);
if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_REPEAT_PASSWORD_TXT),OtherBuffer))
{
OtherBuffer[20] = 0;
if(!memcmp(OtherBuffer,SomeBuffer,20))
{
Encrypt(OtherBuffer,20,PhonePassword,OtherBuffer,strlen(OtherBuffer));
PhonePasswordUsed = TRUE;
}
else
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
}
else
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
}
}
ActiveGadget = OldActiveGadget;
}
ReleaseWindow(PanelWindow);
break;
case GAD_EDIT:
if(Selected != ~0)
{
BlockWindow(PanelWindow);
switch(Code)
{
case EDIT_RATES:
if(Phonebook[Selected] == ChosenEntry)
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_EDIT_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
PhonebookChanged |= RatePanel(PhoneList,Phonebook[Selected]);
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
}
break;
case EDIT_PASSWORD:
PhonebookChanged |= PasswordUserPanel(Phonebook[Selected]);
break;
default:
PhonebookChanged |= EditConfig(Phonebook[Selected] -> Config,Code,PanelWindow);
break;
}
ActiveGadget = GadgetArray[GAD_NAME];
ReleaseWindow(PanelWindow);
}
break;
case GAD_DIALLIST:
if(!Count && Selected != ~0)
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
SPrintf(Phonebook[Selected] -> Node -> LocalName," %s",Phonebook[Selected] -> Header -> Name);
Phonebook[Selected] -> Count = Count++;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
}
if(Count > 0)
{
DialTheList = TRUE;
Terminated = TRUE;
}
break;
}
}
}
}
RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
PopWindow();
OffsetX = PanelWindow -> LeftEdge;
OffsetY = PanelWindow -> TopEdge;
CloseWindow(PanelWindow);
}
}
if(PhonebookChanged)
RebuildMenu = TRUE;
FreeGadgets(GadgetList);
FreeDialList(TRUE);
if(PhoneList)
{
if(Count > 0)
{
TempNode = (struct PhoneNode *)PhoneList -> lh_Head;
while(TempNode -> VanillaNode . ln_Succ)
{
if(TempNode -> Entry -> Count != -1)
SortToList(TempNode);
TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ;
}
if(!DialList)
DialTheList = FALSE;
}
DeletePhoneList(PhoneList);
}
return(DialTheList);
}